Imports AxSftTreeLib70
Imports SftTreeLib70
Imports Softelvdm.OLEConvert

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
Public WithEvents ToolTip1 As System.Windows.Forms.ToolTip
Public WithEvents Combo1 As System.Windows.Forms.ComboBox
Public WithEvents Text1 As System.Windows.Forms.TextBox
Public WithEvents Command1 As System.Windows.Forms.Button
Public WithEvents Label5 As System.Windows.Forms.Label
Public WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents AxSftTree1 As AxSftTreeLib70.AxSftTree
Friend WithEvents SftHelperComponent1 As Softelvdm.OCXHelper.SftHelperComponent
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))
Me.AxSftTree1 = New AxSftTreeLib70.AxSftTree
Me.ToolTip1 = New System.Windows.Forms.ToolTip(Me.components)
Me.Combo1 = New System.Windows.Forms.ComboBox
Me.Text1 = New System.Windows.Forms.TextBox
Me.Command1 = New System.Windows.Forms.Button
Me.Label5 = New System.Windows.Forms.Label
Me.Label1 = New System.Windows.Forms.Label
Me.SftHelperComponent1 = New Softelvdm.OCXHelper.SftHelperComponent(Me.components)
CType(Me.AxSftTree1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'AxSftTree1
'
Me.AxSftTree1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
            Or System.Windows.Forms.AnchorStyles.Left) _
            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.AxSftTree1.Location = New System.Drawing.Point(8, 24)
Me.AxSftTree1.Name = "AxSftTree1"
Me.AxSftTree1.OcxState = CType(resources.GetObject("AxSftTree1.OcxState"), System.Windows.Forms.AxHost.State)
Me.AxSftTree1.Size = New System.Drawing.Size(489, 553)
Me.AxSftTree1.TabIndex = 21
'
'Combo1
'
Me.Combo1.BackColor = System.Drawing.SystemColors.Window
Me.Combo1.Cursor = System.Windows.Forms.Cursors.Default
Me.Combo1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Combo1.ForeColor = System.Drawing.SystemColors.WindowText
Me.Combo1.Location = New System.Drawing.Point(502, 144)
Me.Combo1.Name = "Combo1"
Me.Combo1.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Combo1.Size = New System.Drawing.Size(81, 21)
Me.Combo1.TabIndex = 19
Me.Combo1.Text = "Combo1"
Me.Combo1.Visible = False
'
'Text1
'
Me.Text1.AcceptsReturn = True
Me.Text1.AutoSize = False
Me.Text1.BackColor = System.Drawing.SystemColors.Window
Me.Text1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.Text1.Cursor = System.Windows.Forms.Cursors.IBeam
Me.Text1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Text1.ForeColor = System.Drawing.SystemColors.WindowText
Me.Text1.Location = New System.Drawing.Point(502, 112)
Me.Text1.MaxLength = 0
Me.Text1.Name = "Text1"
Me.Text1.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Text1.Size = New System.Drawing.Size(81, 20)
Me.Text1.TabIndex = 18
Me.Text1.Text = "Text1"
Me.Text1.Visible = False
'
'Command1
'
Me.Command1.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Command1.BackColor = System.Drawing.SystemColors.Control
Me.Command1.Cursor =System.Windows.Forms.Cursors.Default
Me.Command1.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Command1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Command1.ForeColor = System.Drawing.SystemColors.ControlText
Me.Command1.Location = New System.Drawing.Point(502, 8)
Me.Command1.Name = "Command1"
Me.Command1.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Command1.Size = New System.Drawing.Size(81, 25)
Me.Command1.TabIndex = 15
Me.Command1.Text = "Close"
'
'Label5
'
Me.Label5.BackColor = System.Drawing.SystemColors.Control
Me.Label5.Cursor = System.Windows.Forms.Cursors.Default
Me.Label5.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Label5.ForeColor = System.Drawing.SystemColors.ControlText
Me.Label5.Location = New System.Drawing.Point(502, 192)
Me.Label5.Name = "Label5"
Me.Label5.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Label5.Size = New System.Drawing.Size(81, 201)
Me.Label5.TabIndex = 20
Me.Label5.Text = "Click on the SftTree/OCX control and hit F1 to access online help for SftTree/OCX" & _
" 6.0"
Me.Label5.Visible = False
'
'Label1
'
Me.Label1.BackColor = System.Drawing.SystemColors.Control
Me.Label1.Cursor = System.Windows.Forms.Cursors.Default
Me.Label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Label1.ForeColor = System.Drawing.SystemColors.ControlText
Me.Label1.Location = New System.Drawing.Point(6, 8)
Me.Label1.Name = "Label1"
Me.Label1.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Label1.Size = New System.Drawing.Size(489, 16)
Me.Label1.TabIndex = 16
Me.Label1.Text = "Simple Cell Editing Sample with edit controls and combo boxes."
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.CancelButton = Me.Command1
Me.ClientSize = New System.Drawing.Size(589, 590)
Me.Controls.Add(Me.Combo1)
Me.Controls.Add(Me.Text1)
Me.Controls.Add(Me.Command1)
Me.Controls.Add(Me.Label5)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.AxSftTree1)
Me.Name = "Form1"
Me.Text = "Softel vdm, Inc. - CellEditing Sample"
CType(Me.AxSftTree1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)

    End Sub

#End Region
    '--locate-marker--

    Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click
        Application.Exit()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim ItemIndex As Integer

        ItemIndex = AxSftTree1.Items.Add("Click on a cell to edit")
        AxSftTree1.get_Cell(ItemIndex, 1).Text = "Use Tab/Return keys"
        AxSftTree1.get_Cell(ItemIndex, 2).Text = "Use arrow keys"

        ItemIndex = AxSftTree1.Items.Add("This sample supports cell navigation")
        AxSftTree1.get_Cell(ItemIndex, 1).Text = "Ctrl+Home and Ctrl+End"

        Dim i As Integer
        Dim Item As SftTreeItem
        Dim Cell As SftTreeCell

        For i = 1 To 50

            ItemIndex = AxSftTree1.Items.Add("An item")
            AxSftTree1.get_Cell(ItemIndex, 1).Text = "2nd Column"
            AxSftTree1.get_Cell(ItemIndex, 2).Text = "3rd Column"

            ItemIndex = AxSftTree1.Items.Add("Another item")
            Item = AxSftTree1.get_Item(ItemIndex)
            Item.Level = 1
            Item.Cell(1).Text = "2nd Column"
            Item.Cell(2).Text = "3rd Column"

            ItemIndex = AxSftTree1.Items.Add("This item can't be edited")
            Item = AxSftTree1.get_Item(ItemIndex)
            Item.Level = 2
            Item.EditIgnore = True
            Item.Cell(0).Image.Appearance = SftPictureImageConstants.sftImageCheckboxYes
            Item.Cell(1).Text = "2nd Column (can't edit this item)"
            Item.Cell(2).Text = "3rd Column (can't edit this item)"

            ItemIndex = AxSftTree1.Items.Add("A fourth item")
            Item = AxSftTree1.get_Item(ItemIndex)
            Item.Level = 1
            Cell = AxSftTree1.get_Cell(ItemIndex, 1)
            Cell.Text = "This cell can't be edited"
            Cell.EditIgnore = True
            Cell.Image.Appearance = SftPictureImageConstants.sftImageCheckboxYes
            AxSftTree1.get_Cell(ItemIndex, 2).Text = "3rd Column"
        Next

        AxSftTree1.ColumnsObj.MakeOptimal()
        AxSftTree1.RowHeaders.MakeOptimal()
        AxSftTree1.Items.RecalcHorizontalExtent()
    End Sub

    Private Sub AxSftTree1_ItemClick(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_ItemClickEvent) Handles AxSftTree1.ItemClick
        Dim Img As SftPictureObject
        Dim AreaType As SftTreeAreaTypeConstants
        AreaType = e.areaType
        If AreaType = SftTreeAreaTypeConstants.constSftTreeCellText Then
            ' User clicked on a cell
           AxSftTree1.get_Cell(e.itemIndex, e.colIndex).Edit(0, 0)
        ElseIf AreaType = SftTreeAreaTypeConstants.constSftTreeCellGraphic Then
           ' check if check box - toggle
           Img = AxSftTree1.get_Cell(e.itemIndex, e.colIndex).Image
           If Img.Appearance = SftPictureImageConstants.sftImageCheckboxNo Then
               Img.Appearance = SftPictureImageConstants.sftImageCheckboxYes
           ElseIf Img.Appearance = SftPictureImageConstants.sftImageCheckboxYes Then
               Img.Appearance = SftPictureImageConstants.sftImageCheckboxNo
           End If
        End If
    End Sub

    Private Sub AxSftTree1_ItemDblClick(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_ItemDblClickEvent) Handles AxSftTree1.ItemDblClick
        Dim Img As SftPictureObject
        Dim AreaType As SftTreeAreaTypeConstants
        AreaType = e.areaType
        If AreaType = SftTreeAreaTypeConstants.constSftTreeCellText Then
            ' User clicked on a cell
            AxSftTree1.get_Cell(e.itemIndex, e.colIndex).Edit(0, 0)
        ElseIf AreaType = SftTreeAreaTypeConstants.constSftTreeCellGraphic Then
            ' check if check box - toggle
            Img = AxSftTree1.get_Cell(e.itemIndex, e.colIndex).Image
            If Img.Appearance = SftPictureImageConstants.sftImageCheckboxNo Then
                Img.Appearance = SftPictureImageConstants.sftImageCheckboxYes
            ElseIf Img.Appearance = SftPictureImageConstants.sftImageCheckboxYes Then
                Img.Appearance = SftPictureImageConstants.sftImageCheckboxNo
            End If
        End If
    End Sub

    Private Sub AxSftTree1_ToolTipVScroll(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_ToolTipVScrollEvent) Handles AxSftTree1.ToolTipVScroll
        e.text = "Item " & e.itemIndex & " - " & e.text
    End Sub

    Private Sub AxSftTree1_EditAllowed(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditAllowedEvent) Handles AxSftTree1.EditAllowed
        ' Last chance to suppress cell editing for a cell
        'If e.itemIndex = 1 And e.colIndex = 1 Then
        '    e.allowed = False
        'End If
    End Sub

    Private Sub AxSftTree1_EditInitializing(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditInitializingEvent) Handles AxSftTree1.EditInitializing
        Dim ctrl As System.Windows.Forms.Control

        ' Choose a control based on current column being edited
        If e.editCol = 1 Then
            ctrl = Combo1
        Else
            ctrl = Text1
        End If

        ' LeftPix/TopPix/WidthPix/HeightPix describes the current cell area
        ' we need to return the position and size needed for editing.
        ' In this example, we use the height of the control on the form
        ' and center it over the cell.
        e.topPix = e.topPix + (e.heightPix - ctrl.Height) / 2
        e.heightPix = ctrl.Height

        ' Set the text in the control used for cell editing and
        ' set other control-specific properties
        If ctrl Is Text1 Then
            Text1.Width = 200
            Text1.Text = AxSftTree1.get_Cell(e.editIndex, e.editCol).Text
            Text1.SelectionStart = 0
            Text1.SelectionLength = 999
        Else
            Combo1.Items.Clear()
            Combo1.Items.Add("Option 1")
            Combo1.Items.Add("Option 2")
            Combo1.Items.Add("Option 3")
            Combo1.Items.Add(AxSftTree1.get_Cell(e.editIndex, e.editCol).Text)
            Combo1.Text = AxSftTree1.get_Cell(e.editIndex, e.editCol).Text
        End If

        ' Return the control's window handle
        e.window = ctrl.Handle.ToInt32()
        e.vData = ctrl

        ' Define navigation keys
        ' VK_TAB
        AxSftTree1.CellEditIntercept(9, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
        ' VK_RETURN
        AxSftTree1.CellEditIntercept(13, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
        ' VK_HOME
        AxSftTree1.CellEditIntercept(36, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar)
        ' VK_END
        AxSftTree1.CellEditIntercept(35, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar)

        If ctrl Is Text1 Then
            ' We want these keys just for the edit control.
            ' VK_UP
            AxSftTree1.CellEditIntercept(38, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
            ' VK_DOWN
            AxSftTree1.CellEditIntercept(40, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
        End If
    End Sub

    Private Sub AxSftTree1_EditInitialized(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditInitializedEvent) Handles AxSftTree1.EditInitialized
        ' Show the combo box dropdown portion
        If e.vData Is Combo1 Then
            ' We're taking over positioning, so we can drop down the dropdown portion of the control
            e.positioned = True
            Combo1.Left = e.leftPix
            Combo1.Top = e.topPix
            Combo1.Width = e.widthPix
            Combo1.Height = e.heightPix
            Combo1.Enabled = True
            Combo1.Visible = True
            Combo1.Focus()
            Combo1.DroppedDown = True
        End If
    End Sub

    Private Sub AxSftTree1_EditNavigating(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditNavigatingEvent) Handles AxSftTree1.EditNavigating
        ' Process key pressed
        AxSftTree1.EditNavigate(e.key, e.shift)
    End Sub

    Private Sub AxSftTree1_EditValidate(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditValidateEvent) Handles AxSftTree1.EditValidate
        ' Validate the new cell contents
        Dim S As String
        If e.vData Is Text1 Then
            S = Text1.Text
        Else
            S = Combo1.Text
        End If
        S = S.Trim()
        If S.Length <= 0 Then
            MessageBox.Show("Just to demonstrate data input validation, this example rejects empty cells.  Please enter some data.")
            e.inputValid = False
        End If
    End Sub

    Private Sub AxSftTree1_EditEnding(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditEndingEvent) Handles AxSftTree1.EditEnding
        ' Save the new cell contents
        If e.saveInput Then
            If e.vData Is Text1 Then
                AxSftTree1.get_Cell(e.editIndex, e.editCol).Text = Text1.Text
            Else
                AxSftTree1.get_Cell(e.editIndex, e.editCol).Text = Combo1.Text
            End If
        End If
        Dim ctrl As Control
        ctrl = e.vData
        ctrl.Visible = False
        ctrl.Enabled = False
    End Sub

Private Sub AxSftTree1_CaretChange(ByVal sender As System.Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_CaretChangeEvent) Handles AxSftTree1.CaretChange

End Sub
End Class